package Controllers;

import GUIs.f_dangnhap;
import com.db4o.ObjectSet;
import com.db4o.ObjectContainer;
import Configs.Config;
import GUIs.f_nhanvien;
import GUIs.f_quanly;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
import models.Quyen;
import models.TaiKhoan;

public class DangNhapController {

    private final Config conn;
    private BieuThucChinhQuy btcq;

    public DangNhapController(Config conn) {
        this.conn = conn;
    }

    public void ValidnVerify(f_dangnhap form_dn, JTextField tfusername, JPasswordField tfpassword) {
        String user = tfusername.getText().trim();
        String password = tfpassword.getText();
        this.btcq = new BieuThucChinhQuy(user, "^[A-Za-z0-9_-]{1,30}$");
        if (!this.btcq.isBoolean()) {
            JOptionPane.showMessageDialog(form_dn, "Tài khoản người dùng không hợp lệ\nCảnh báo: tài khoản chỉ chứa các ký tự [A-Za-z0-9_-], có độ dài trong khoản 1-30", "Thông báo", JOptionPane.ERROR_MESSAGE);
            tfusername.requestFocus();
        } else if (password.length() <= 2) {
            JOptionPane.showMessageDialog(form_dn, "Mật khẩu không hợp lệ!\nCảnh báo: mật khẩu phải có độ dài hơn 2 ký tự.", "Thông báo", JOptionPane.ERROR_MESSAGE);
            tfpassword.requestFocus();
        } else {
            TaiKhoan tk = new TaiKhoan(user, Encode.encode_url_v3(password, user));
            ObjectContainer db = this.conn.getConn();
            ObjectSet<TaiKhoan> taikhoans = db.queryByExample(tk);
            if (taikhoans.size() > 0) {
                TaiKhoan taikhoan = taikhoans.get(0);
                if (!taikhoan.getIsdelete()) {
                    if (taikhoan.getQuyen() == Quyen.Quản_trị) {
                        f_quanly quantri = new f_quanly(this.conn, taikhoan.getMSNV());
                        quantri.setVisible(true);
                        form_dn.setVisible(false);
                    } else {
                        f_nhanvien nhanvien = f_nhanvien.getInstance(this.conn, taikhoan.getMSNV());
                        nhanvien.createAndShowUI();
                        form_dn.setVisible(false);
                    }
                } else {
                    JOptionPane.showMessageDialog(form_dn, "Tài khoản này đang tạm khóa, vui lòng liên hiện với người quản trị để biết thêm thông tin chi tiết.", "Thông báo", JOptionPane.ERROR_MESSAGE);
                    tfusername.requestFocus();
                }
            } else {
                JOptionPane.showMessageDialog(form_dn, "Tài khoản hoặc mật khẩu không chính xác", "Thông báo", JOptionPane.ERROR_MESSAGE);
                tfusername.requestFocus();
            }
        }
    }
}
